import * as THREE from "three";
import "./index.css";
import { gsap } from "gsap";

// 轨道控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";

// 场景
const scene = new THREE.Scene();

// 相机(透视)
const camera = new THREE.PerspectiveCamera(
  75, // 角度
  window.innerWidth / window.innerHeight,
  0.1, // 近端
  1000 // 远端
);

// 设置相机位置
camera.position.set(0, 0, 10); // xyz

scene.add(camera);

// 添加物体
// 创建几何体
const box = new THREE.BoxGeometry(1, 1, 1); // 几何体
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 基础网格材质
// 根据几何体和材质创建物体(将几何体和网格材质放到网格中,拿到最终物体)
const cube = new THREE.Mesh(box, material);

// 修改物体的位置(二种方式)
// cube.position.set(5, 0, 0);
// cube.position.x = 5;
// 设置缩放
// cube.scale.set(3, 2, 1); // 3倍
// cube.scale.y = 2;
// 设置旋转
cube.rotation.set(Math.PI / 4, 0, 0);
// cube.rotation.x = 3;

scene.add(cube);
console.log(cube);

// 初始化渲染器
const renderer = new THREE.WebGLRenderer();
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight);
// 将webgl渲染的canvas添加到body上
document.body.appendChild(renderer.domElement);

// 使用渲染器(通过相机将场景渲染进来)
renderer.render(scene, camera);

// 创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement);
// 设置控制器的阻尼感
controls.enableDamping = true;

// 添加坐标轴
const axeshelp = new THREE.AxesHelper(5); // 线段长度为5
scene.add(axeshelp);

// 设置动画(控制对象的属性)
let animate = gsap.to(cube.position, {
  x: 5,
  ease: "power1.inOut", // 动画模式
  duration: 5,
  onComplete: () => {
    // alert("动画结束");
  },
  onStart() {
    // alert("开始动画");
  },
  // 设置重复次数  -1为无限次
  repeat: -1,
  // 设置往返
  yoyo: true,
  // 延时执行
  delay: 2,
});
gsap.to(cube.rotation, {
  x: 2 * Math.PI,
  duration: 5,
});

window.addEventListener("dblclick", () => {
  // animate.pause();
  // setTimeout(() => {
  //   animate.play();
  // }, 3000);
  //
  // 双击暂停和播放
  // if (animate.isActive()) {
  //   animate.pause(); // 暂停
  // } else {
  //   animate.resume(); // 恢复
  // }
  //
  // 双击全屏
  // 全屏时文档上会自动添加fullscreenElement元素
  console.log(document.fullscreenElement);
  if (document.fullscreenElement) {
    document.exitFullscreen(); // 让文档退出全屏
  } else {
    renderer.domElement.requestFullscreen(); // 让画布对象全屏
  }
});

// 通过requestAnimationFrame执行函数时,默认会传入执行的时间
function render(time) {
  controls.update();
  renderer.render(scene, camera);
  // 下一帧再次执行
  requestAnimationFrame(render);
}

// render();
requestAnimationFrame(render);

// 监听画面变化
window.addEventListener("resize", () => {
  // 1.更新摄像头位置
  camera.aspect = window.innerWidth / window.innerHeight;
  // 2.更新摄像机的投影矩阵(参数改变,必须调)
  camera.updateProjectionMatrix();
  // 3.更新渲染的尺寸大小
  renderer.setSize(window.innerWidth, window.innerHeight);
  // 4.设置渲染器的像素比
  renderer.setPixelRatio(window.devicePixelRatio);
});
